<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // ES6
    // ES6 允许按照一定模式，从数组和对象中提取值，对变量进行赋值，这被称为解构（Destructuring）。

    // 本质上，这种写法属于“模式匹配”，只要等号两边的模式相同，左边的变量就会被赋予对应的值。

    // 数组解构  => 对应下标解构


    // 完全解构
    // var list = [1, 2, 3];
    // var [a, b, c] = [1, 2, 3];
    // console.log(a, b, c);

    // 不完全解构  即等号左边的模式，只匹配一部分的等号右边的数组。这种情况下，解构依然可以成功。
    // var [a, , c] = [1, 2, 3];
    // console.log(a, c);

    // 如果解构不成功，变量的值就等于undefined。
    // var [a, b, c, d] = [1, 2, 3];
    // console.log(a, b, c, d);

    // 在解构过程中,可以给变量设置默认值
    // var [a, b, c, d = 0] = [1, 2, 3];  // d = d === undefined ? 0 : d
    // console.log(a, b, c, d);

    // var [a, b, c, d = 0] = [1, 2, 3, 4];
    // console.log(a, b, c, d);

    // var [a, b, c, d = 0] = [1, 2, 3, null];
    // console.log(a, b, c, d);


    // 数组解构需要注意:
    // 如果等号的右边不是数组（或者严格地说，不是可遍历的结构， 数组/伪数组/字符串），那么将会报错

    // let [foo] = 1;
    // let [foo] = false;
    // let [foo] = NaN;
    // let [foo] = undefined;
    // let [foo] = null;
    // let [foo] = {};


    // 数组解构高级用法:

    // (1) 数组解构 配合 扩展运算符 => Rest  合并剩余参数

    var [a, b, ...c] = [1, 2, 3, 4, 5, 6];
    // a = 1  b = 2  ...c = 3,4,5,6
    console.log(a, b, c);

    // 报错: Rest element must be last element
    // var [a, ...b, c] = [1, 2, 3, 4, 5, 6];
    // // a = 1  b = 2  ...c = 3,4,5,6
    // console.log(a, b, c);

    // 数组嵌套时解构
    var list = [1, 2, [3, 4, [5]], 6];
    console.log(list);

    // var [a, b, c, d] = [1, 2, [3, 4, [5]], 6];
    // console.log(a, b, c, d);

    // var [c1, c2, c3] = c;
    // console.log(c1, c2, c3);

    // var [c31] = c3;
    // console.log(c31);

    // var [a, b, [c1, c2, [c31]], d] = [1, 2, [3, 4, [5]], 6];
    // console.log(a, b, c, d);

    // var [a, b, [c, d, [e]], f] = [1, 2, [3, 4, [5]], 6];
    // console.log(a, b, c, d, e, f);

    var [a, b, [c, d, [e]], f] = [1, 2, [3, 4, [5]], 6];
    console.log(a, b, c, d, e, f);






</script>

</html>